package eclipse;

import java.util.Arrays;
import java.util.Random;


/*
冒泡排序
 */
public class ArrayExercise06 {
    public static void main(String[] args) {
        int[] arr = randomArray();
        System.out.println(Arrays.toString(arr));
        System.out.println("---------------");
        sortArray(arr);
        System.out.println("---------------");
        System.out.println(Arrays.toString(arr));
    }

    // flag 的作用是减少循环交换的次数，如果已经排序完成，就没必要再进行多余的循环
    private static void sortArray(int[] arr) {
        for(int i = 0; i < arr.length; i++){
            boolean flag = false; // 没有交换
            for(int j = arr.length - 1; j > i; j--){
                if(arr[j - 1] > arr[j]){
                    swap(arr, j - 1, j);
                    flag = true;
                }
            }
            if(!flag){
                break;
            }
            System.out.println(Arrays.toString(arr));
        }

    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    private static int[] randomArray() {
        // 5 + [0, 6) 随机长度的数组，随机填入100内随机值
        int len = 5 + new Random().nextInt(6);
        int[] arr = new int[len];
        for(int i = 0; i < arr.length; i++){
            int number = new Random().nextInt(100);
            arr[i] = number;
        }
        return arr;
    }
}
